package com.sz.biz.common.sup.service;

import com.sz.biz.common.sup.dto.SupplierDto;
import com.sz.biz.common.sup.entity.Supplier;
import com.sz.biz.common.sup.entity.SupplierBD;
import com.sz.biz.common.sup.entity.SupplierContact;
import com.sz.common.base.dto.QueryParams;
import com.sz.common.base.dto.ResultDto;

import java.util.Date;
import java.util.List;

/**
 * Function: SupplierService <br>
 * Author: wentao.chang <br>
 * Date: 2016-11-24 14:08:00
 */
public interface SupplierService {
    /**
     * @param supplierDto
     * @return
     */
    int saveSupplier(SupplierDto supplierDto);

    /**
     * @param supplierId
     * @param supplierDto
     */
    int updateSupplierMain(int supplierId, SupplierDto supplierDto);

    /**
     * @param supplierId
     * @param supplierDto
     */
    int updateSupplierBiz(int supplierId, SupplierDto supplierDto);


    /**
     * @param supplierId
     * @param contactId
     * @param supplierContact
     */
    void updateSupplierContact(int supplierId, int contactId, SupplierContact supplierContact);

    /**
     * @param supplierId
     * @param supplierDto
     */
    int updateSupplierLeal(int supplierId, SupplierDto supplierDto);

    /**
     * @param supplierId
     */
    void deleteSupplier(int supplierId);

    /**
     * @param supplierId
     */
    void auditSupplier(int supplierId);

    /**
     * @param supplierIds
     */
    void deleteSuppliers(int[] supplierIds);

    /**
     * @param serviceTypeCode
     * @param queryString
     * @param rank
     * @param greaterthan
     * @param pageIndex
     * @param pageSize
     */
    ResultDto findSuppliersByFilterListPage(int type, String serviceTypeCode, String queryString, float rank, boolean greaterthan, int pageIndex, int pageSize);

    /**
     * @param supId supId
     * @return SupplierDto
     */
    SupplierDto findById(int supId);


    /**
     * @param sid     sid
     * @param entryid entryid
     * @param bd      bd
     */
    void updateSupplierBd(int sid, int entryid, SupplierBD bd);

    /**
     * @param sid   sid
     * @param bdids bdids
     */
    void deleteSupplierBds(int sid, int[] bdids);


    /**
     * 异步校验供应商编码
     *
     * @param sid  sid
     * @param code code
     */
    void supplierCodeCheck(int sid, String code);

    /**
     * 异步校验供应商全称
     *
     * @param sid        sid
     * @param simpleName simpleName
     */
    void supplierSimpleNameCheck(int sid, String simpleName);

    /**
     * 异步校验供应商名称
     *
     * @param sid
     * @param name
     * @return
     */
    void supplierNameCheck(int sid, String name);

    /**
     * @param sid
     * @param bd
     */
    void saveSupplierBd(int sid, SupplierBD bd);

    /**
     * @param sid
     * @param contact
     * @return
     */
    void saveSupplierContact(int sid, SupplierContact contact);

    /**
     * @param sid  sid
     * @param cids cids
     */
    void deleteSupplierContacts(int sid, int[] cids);

    /**
     * @param q q
     * @return ResultDto
     */
    ResultDto findSuppliersByFilter(String q, int pageIndex, int pageSize,int type);

    /**
     * 获取当前的贸易供应商，临时方案，在cus_user表中username以sup_开头的代表为贸易供应商。所以这里客户如果登录后，如果名字带sup，那么就获取登录的供应商信息
     *
     * @return
     */
    SupplierDto findCurrTrdSupplier();


    ResultDto findByFilterForOrder(QueryParams params, int type);

    Supplier findSimpleById(int supId);

    List<Supplier> findSimpleByIds(List<Integer> supIds);

    boolean validSupplierBd(int sid, int id, int bdid);

    List<Supplier> finByCreateTimeForRpt(Date dateBegin, Date dateEnd);
}
